package cn.bugstack.openai.executor.model.baichuan.valobj;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * @author llq
 * @Description 百川智能大模型 流式接口响应参数
 */

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
public class BaiChuanModelCompletionResponse {
    /** "Chat Complete"的唯一标识符 */
    private String id;

    /** 创建聊天完成时的 Unix 时间戳（秒） */
    private Integer created;

    /** 聊天完成选项的列表 */
    private List<Choice> choices;

    /** 用于完成聊天的模型 */
    private String model;

    /** 始终为"chat.completion.chunk" */
    private String object;

//    /** 完成请求的使用情况统计信息 */
//    private Usage usage;

    /** 知识库相关响应 */
    private KnowledgeBase knowledge_base;




    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class Choice {

        /** 模型停止生成 token 的原因，为以下值：
         1. stop ：模型达到自然停止点/用户 stop 指令
         2. content_filter：被内容过滤器中过滤掉 */
        private String finish_reason;

        /** choices 中对应的索引 */
        private Integer index;

        /** 增量返回，由流式模型生成的聊天完成消息 */
        private Delta delta;
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class Delta {

        /**
         * 消息作者的角色，为以下其中之一
         * 1. user
         * 2. assistant
         */
        private String role;

        /**
         * 消息内容
         */
        private String content;
    }


    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class Usage {
        /** 生成词中的 token 数 */
        private Integer completion_tokens;

        /** 提示词中的 token 数 */
        private Integer prompt_tokens;

        /** 会话的总 token 数 */
        private Integer total_tokens;
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class KnowledgeBase {
        private List<Cite> cites;
    }


    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class Cite {
        /** 文件名称 */
        private String title;
        /** 文件 ID */
        private String file_id;
        /** 分片内容 */
        private String content;
    }

}
